package components
{
import flash.display.DisplayObject;
import flash.text.TextLineMetrics;
import mx.controls.Button;
import mx.core.IFlexDisplayObject;
import mx.core.mx_internal;

use namespace mx_internal;

public class MultilineButton extends Button
{

	public function MultilineButton()
	{
		super();
	}

	override protected function createChildren():void
	{
		if (!textField)
		{
			textField = new NoTruncationUITextField();
			textField.styleName = this;
			addChild(DisplayObject(textField));
		}

		super.createChildren();

		textField.multiline = true;
		textField.wordWrap = true;
	}

	override protected function measure():void
	{
		if (!isNaN(explicitWidth))
		{
			var tempIcon:IFlexDisplayObject = getCurrentIcon();
			var w:Number = explicitWidth;
			if (tempIcon)
				w -= tempIcon.width + getStyle("horizontalGap") + getStyle("paddingLeft") + getStyle("paddingRight");
			textField.width = w;
		}
		super.measure();
	
	}

    override public function measureText(s:String):TextLineMetrics
	{
		textField.text = s;
		var lineMetrics:TextLineMetrics = textField.getLineMetrics(0);
		lineMetrics.width = textField.textWidth + 6;
		lineMetrics.height = textField.textHeight + 6;
		return lineMetrics;
	}
	
	override public function set label(value:String):void
	{
		super.label = value;
        textField.text = value;
		textField.width = width;
		this.updateDisplayList(this.width, this.height);
	}
 
}

}
